package mtest3.day3;

public class LinkListHead implements IList3 {
    public Node head;
    int len;

    public LinkListHead() {
        //链表初始化  head结点对象创建
        head = new Node();
        len = 0;
    }

    @Override
    public void add(Object e) {

    }

    @Override
    public void insert(int index, Object data) {
        //越界
        if (index < 0 || index > len) {
            throw new RuntimeException("下标越界");
        }


        //head  a  b  c  d  e    index:0   e:x
        //记录head结点 用来遍历查找后续结点
        Node curNode = head;

        //找到插入位置的上一个结点
        for (int i = 0; i < index; i++) {
            curNode = curNode.next;
        }

        //  生成新的结点  指向curNode的下一个结点
        // 让head的next指向新结点
        Node newNode = new Node(data);
        newNode.next = curNode.next;
        curNode.next = newNode;
        len++;
    }

    @Override
    public Object remove(int index) {
        //越界
        if (index < 0 || index >= len) {
            throw new RuntimeException("下标越界");
        }
        //        0 1 2 3 4
        //  head  a b c d e       把3 位置删除   0
        //记录head结点 用来遍历查找后续结点
        Node curNode = head;

        //找到插入位置的上一个结点
        for (int i = 0; i < index; i++) {
            System.out.println(curNode.data);
            curNode = curNode.next;
        }
        //根据curNode 找到到要删除的结点rmNode
        Node rmNode = curNode.next;
        // 让curNode的next  指向rmNode的next 那么rmNode就被删除了
        curNode.next = rmNode.next;

        len--;
        return rmNode.data;
    }

    @Override
    public void set(int index, Object e) {

    }

    @Override
    public Object get(int index) {
        return null;
    }

    @Override
    public int size() {
        return len;
    }

    @Override
    public boolean isEmpty() {
        return len == 0;
    }

    @Override
    public int indexOf(Object e) {
        return 0;
    }

    @Override
    public String toString() {
        Node curNode = head;
        String text = "";
        while (curNode.next != null) {
            text += curNode.next.data + ",";
            curNode = curNode.next;
        }
        return text;
    }
}
